home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Garbo
/
Garbo.cdr
/
mac
/
cdev
/
sludge.sit
/
Source Code
/
Parasite.a
< prev
next >
Wrap
Text File
|
1999-10-07
|
19KB
|
359 lines
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ File Name: Parasite.a Ñ
;Ñ ---------- Ñ
;Ñ Ñ
;Ñ Copyright ⌐ 1989 Apple Computer, Inc. All Rights Reserved Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This file contains the assembly language routines of the SLUDGE Ñ
;Ñ parasite. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
INCLUDE 'traps.a'
INCLUDE 'ToolEqu.a'
EXPORT ATRAP_EX:CODE
EXPORT TAKE_A_TRAP_EXCEPTION_VECTOR:CODE
EXPORT TAKE_JUMP_TRACE_VECTOR:CODE
IMPORT HLL_ATRAP_EX:CODE
EXPORT MASTER_A_TRAP:CODE
EXPORT GET_MASTER_A_TRAP_HANDLE:CODE
EXPORT GET_SAVED_A_TRAP_VECTOR:CODE
EXPORT SET_JUMP_TRACE_BIT:CODE
EXPORT CLEAR_JUMP_TRACE_BIT:CODE
SEG 'NUGG'
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: MASTER_SLUDGE Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This function is never executed. It is a place for a DC.L that Ñ
;Ñ contains the current SLUDGE factor. There are access routines for Ñ
;Ñ this DC.L later in this file. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
MASTER_SLUDGE PROC
Jmp skipper
DC.L 0
skipper Pea #'How dare you disturb the sludge MASTER! Use the g command NOW!'
_DebugStr
RTS
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: GET_SAVED_SLUDGE_FACTOR Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This function returns the current SLUDGE factor in register D0. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
GET_SAVED_SLUDGE_FACTOR PROC
Move.L A0,-(A7)
Lea MASTER_SLUDGE,A0
AddQ.L #4,A0
Move.L (A0),D0
Move.L (A7)+,A0
RTS
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: ATRAP_EX Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This proc is executed at each a-trap exception. SLUDGE needs Ñ
;Ñ control here because the exception turns off the jump-trace bit Ñ
;Ñ and SLUDGE needs to turn it back on. So SLUDGE turns it back on Ñ
;Ñ and jumps to the system a-trap dispatcher. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
ATRAP_EX PROC
Pea #0
MoveM.L A0-A7/D0-D7,-(A7)
Link A6,#0
Move.L A6,-(SP)
Pea 72(A6) ; pass the address of the stack frame
Move.L A0,-(A7)
Jsr HLL_ATRAP_EX
MoveA.L 8(SP),A6
Move.L D0,68(A6) ; the address of the system a-trap dispatcher will be on the top of the stack
Unlk A6
MoveM.L (A7)+,A0-A7/D0-D7
Ori.W #$4000,SR ; set jump trace bit
RTS
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: JTRACE_EX Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This proc is executed at each jump trace exception. It simply Ñ
;Ñ executes a tight loop the number of times specified by the current Ñ
;Ñ SLUDGE factor. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
JTRACE_EX PROC
Move.L D0,-(A7)
JSR GET_SAVED_SLUDGE_FACTOR
back DBF D0,back ; loop here
Move.L (A7)+,D0
OrI.W #$4000,(A7) ; set jump trace bit in stacked status register
RTE
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Function Name Ñ
;Ñ ------------- Ñ
;Ñ TAKE_A_TRAP_EXCEPTION_VECTOR Ñ
;Ñ Ñ
;Ñ Purpose Ñ
;Ñ ------- Ñ
;Ñ This PROC will replace the a-trap exception vector with address of the Ñ
;Ñ ATRAP_EX PROC Ñ
;Ñ Ñ
;Ñ Ñ
;Ñ Modification History Ñ
;Ñ -------------------- Ñ
;Ñ Ñ
;Ñ Name Date Change Ñ
;Ñ ---- ---- ------ Ñ
;Ñ Kevin McEntee 9/21/88 Original implementation Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
TAKE_A_TRAP_EXCEPTION_VECTOR PROC
Move.L A0,-(A7)
Move.L A1,-(A7)
MoveA.L #$28,A0 ; A0 -> A-trap exception vector
Lea ATRAP_EX,A1 ; A1 -> my exception handler
Move.L A1,(A0) ; replace existing exception vector
MoveA.L (A7)+,A1
MoveA.L (A7)+,A0
RTS
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: TAKE_JUMP_TRACE_VECTOR Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This proc accepts a SLUDGE factor as a parameter and saves it as Ñ
;Ñ current SLUDGE factor and sets the jump-trace exception vector to Ñ
;Ñ to JTRACE_EX. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
TAKE_JUMP_TRACE_VECTOR PROC
;
Move.L A0,-(A7)
Move.L A1,-(A7)
Move.L D0,-(A7)
Lea MASTER_SLUDGE,A0
AddQ.L #4,A0
Move.L 16(SP),D0
Move.L D0,(A0) ; save current SLUDGE factor
;
MoveA.L #$24,A0 ; A0 -> trace exception vector
Lea JTRACE_EX,A1 ; A1 -> my exception handler
Move.L A1,(A0) ; replace existing exception vector
;
; ; put RA on top of stack
MoveA.L 12(SP),A1
Move.L A1,16(SP)
;
Move.L (A7)+,D0
MoveA.L (A7)+,A1
MoveA.L (A7)+,A0
AddA.L #4,A7
RTS
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: MASTER_A_TRAP Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This function is never executed. It is a place for a DC.L that Ñ
;Ñ contains the system value for the a-trap exception vector. There Ñ
;Ñ are access routines for this DC.L later in this file. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
MASTER_A_TRAP PROC
Jmp around
DC.L 0
around Pea #'How dare you disturb the a_trap MASTER! Use the g command NOW!'
_DebugStr
RTS
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: GET_MASTER_A_TRAP_HANDLE Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This returns the address of the DC.L of the MASTER_A_TRAP in Ñ
;Ñ register D0. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
GET_MASTER_A_TRAP_HANDLE PROC
Move.L A0,-(A7)
Lea MASTER_A_TRAP,A0
Move.L A0,D0
AddQ.L #4,D0
Move.L (A7)+,A0
RTS
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: GET_SAVED_A_TRAP_VECTOR Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ This returns the saved a-trap execption vector in register DO. Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
GET_SAVED_A_TRAP_VECTOR PROC
Move.L A0,-(A7)
Lea MASTER_A_TRAP,A0
AddQ.L #4,A0
Move.L (A0),D0
Move.L (A7)+,A0
RTS
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;Ñ Ñ
;Ñ Identifier: SET_JUMP_TRACE_BIT and CLEAR_JUMP_TRACE_BIT Ñ
;Ñ ----------- Ñ
;Ñ Ñ
;Ñ Description Ñ
;Ñ ----------- Ñ
;Ñ These procs set and clear the jump-trace bit of the status register.Ñ
;Ñ Ñ
;Ñ History Ñ
;Ñ ------- Ñ
;Ñ Ñ
;Ñ Author Date Description Ñ
;Ñ ------------------------------------------------------------------ Ñ
;Ñ Kevin McEntee 2/20/90 Original Implementation Ñ
;Ñ Ñ
;Ñ Ñ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ*/
SET_JUMP_TRACE_BIT PROC
Ori.w #$4000,SR
RTS
ENDPROC
CLEAR_JUMP_TRACE_BIT PROC
Andi.w #$BFFF,SR
RTS
ENDPROC
END